using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

/// <summary>
/// 物品拾取类
/// </summary>
public class Item : MonoBehaviour
{
    // 物品类型枚举
    public enum ItemType
    {
        Coin,           // 硬币
        HealingPotion   // 治疗药水
    }

    [Header("基本属性")]
    [SerializeField] private ItemType itemType;          // 物品类型
    [SerializeField] private int value;                      // 物品价值

    [Header("抛物线属性")]
    [SerializeField] private float throwHeight = 1f;         // 抛物线高度
    [SerializeField] private float throwDuration = 1f;       // 抛物时间
    public float maxOffsetDistance = 1f;  // 随机偏移的最大距离

    [Header("拾取范围")]
    [SerializeField] private float pickUpDistance = 3f;      // 自动拾取距离
    [SerializeField] private float moveSpeed = 5f;           // 自动拾取速度

    private bool canPickUp = false;                          // 是否可以拾取

    private PlayerCharacter playerCharacter;                 // 玩家对象的引用

    private void Awake()
    {
        playerCharacter = FindObjectOfType<PlayerCharacter>();
    }

    private void Start()
    {
        ThrowItem();
    }
    private void FixedUpdate()
    {
        // 如果可以拾取并且玩家在拾取范围内，则向玩家位置移动
        if (canPickUp && Vector2.Distance(transform.position, playerCharacter.transform.position) < pickUpDistance)
        {
            Vector2 dir = (playerCharacter.transform.position - transform.position).normalized;
            transform.Translate(dir * moveSpeed * Time.deltaTime);
        }
    }

    // 抛物线动画
    private void ThrowItem()
    {
        // 使用DOJump方法实现物体的弹跳
        Vector3 randomOffset = new Vector3(Random.Range(-maxOffsetDistance, maxOffsetDistance), Random.Range(-maxOffsetDistance, maxOffsetDistance), 0f);
        transform.DOJump(transform.position + randomOffset, throwHeight, 1, throwDuration).OnComplete(() =>
        {
            canPickUp = true;  // 动画完成后可以拾取                                
        });
    }

    private void OnTriggerStay2D(Collider2D collision)
    {
        // 如果可以拾取并且碰撞对象是玩家
        if (canPickUp && collision.gameObject.GetComponent<PlayerController>())
        {
            AudioManager.Instance.PlaySFX("拾取");
            CollectPickup();   // 执行拾取逻辑
        }
    }

    // 根据物品类型执行不同的拾取逻辑
    private void CollectPickup()
    {
        switch (itemType)
        {
            case ItemType.Coin:
                HandleCoinPickup();                            // 执行硬币拾取逻辑
                break;
            case ItemType.HealingPotion:
                HandleHealingPotionPickup();                   // 执行治疗药水拾取逻辑
                break;
        }

        Destroy(gameObject);                                   // 拾取完成后销毁物品对象
    }

    // 处理硬币拾取逻辑
    private void HandleCoinPickup()
    {
        GameManager.Instance.ChangeCoins(value);               // 修改游戏中的硬币数量

        // 在物品位置显示拾取文本效果
        GameManager.Instance.ShowText("+" + value, transform.position, Color.yellow);
    }

    // 处理治疗药水拾取逻辑
    private void HandleHealingPotionPickup()
    {
        playerCharacter.SetHealth(value);// 恢复玩家的生命值
    }
}
